#ifndef BDLIVRO_H_
#define BDLIVRO_H_

#include "Livro.h"
#include "../estruturas/ArvoreB.h"

#include <string>

using namespace std;

/**
 * @class BDLivro bdlivro.h "src/kisebo/bdlivro.h"
 * @brief Classe para controle do banco de dados dos livros.
 *  A classe BDLivro é um detalhamento das funções de manipulação de dados de Livro
*/
class BDLivro
{
private:

	/**
	 * Local do arquivo fisico txt dos livros.
	 */
     string arqDados;

     /**
      * Armazena o próximo id de livro a ser acessado.
      */
     long proximoID;

     /**
      * Armazena uma árvore montado por |ID LIVRO | Livro |
      * @see ArvoreB
      */
     ArvoreB<long,Livro> dados;

public:

	/*
	 * @fn BDLivro()
	 * @brief Construtor Principal da entidade BDLivro
	 * Utilizado para criar uma nova instancia da classe.
	 */
	BDLivro();

	/**
	 * @fn virtual ~BDLivro()
	 * @brief Destrutor da entidade
	 * Utilizado para liberar espaço na mémoria, eliminando a instancia
	 * do objeto criado.
	*/
	virtual ~BDLivro();

	/**
	 * @fn void CarregaLivros()
	 * @brief Abrir a lista de livros.
	 * Esse método carrega a lista de livros do arquivo txt.
	*/
	void CarregaLivros();

	void SalvaLivros();
	void MontaPesquisa(int _tipo);
	long GetProximoID();
	Livro Seleciona(long _id);
 	void Remove(long _id);
    void Adiciona(long _ID,Livro _novo);

	/**
	 * @fn void Primeiro()
	 * @brief  Estruturação do primeiro item da árvore.
	 * Após toda a estrutura da árvore ser montada ele aponta para o primeiro item da árvore.
	*/
    void Primeiro();

	/**
	 * @fn void Proximo()
	 * @brief  Estruturação do próximo item da árvore.
	 * Após toda a estrutura da árvore ser montada ele aponta para o próximo item da árvore.
	*/
    void Proximo();

	/**
	 * @fn bool Final()
	 * @brief  Verificar final da árvore.
	 * Esse método verifica se ele percorreu toda a estrutura da árvore até o último item.
	*/
    bool Final();

	/**
	 * @fn livro GetItem()
	 * @brief  Retornar o livro na posição atual.
	 * Essa função é responsável por pegar o próximo item da posição ID.
	*/
    Livro GetItem();

};

#endif /*BDLIVRO_H_*/
